package com.cskaoyan.javase.oop2._1extends._7initialization._4notice;

/**
 * 子类对象初始化过程中的细节问题:
 *      1.new子类对象,只会在堆上创建一个子类对象,不会创建父类对象
 *          --> 构造器的作用不是创建对象的,它只是赋值的,它的赋值:
 *              a.可以在创建自身对象时,给自身成员变量赋值
 *              b.可以在创建子类对象时,给自身成员变量赋值
 *
 *      2.this和super关键字在表示调用构造器时,它们都必须在构造器代码的第一行
 *      所以显然它们是不能同时使用的
 *
 *      3.如果一个类需要被创建对象(实体类)
 *      那么给这个类加上默认无参是一个好习惯
 *
 *      这是因为在默认情况下,子类的隐式对象初始化
 *      要依赖于父类的无参构造器
 *
 *
 *      4.无论是子类对象的隐式初始化还是显示初始化
 *      最终都是为了保证父类构造器先执行
 *
 *
 *
 * @since 11:13
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
}

class Father {
    int num;
    int num2;

    public Father() {
    }

    public Father(int num, int num2) {
        this.num = num;
        this.num2 = num2;
    }
}

class Son extends Father {
    int num3;
    int num4;

    public Son() {
        // super();
    }

    public Son(int num, int num2, int num3, int num4) {
        super(num, num2);
        this.num3 = num3;
        this.num4 = num4;
    }

    public Son(int num3, int num4) {
        // super();
        this.num3 = num3;
        this.num4 = num4;
    }
}
class A{
    int num;
    public A(int num) {
        this.num = num;
    }

 /*   public A() {
    }*/
}
class B extends A{
    public B(int num) {
        super(num);
    }
}